/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ugc.cnel.manabi.bakenbeans;

import com.icesoft.faces.context.effects.JavascriptContext;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import org.ugc.cnel.manabi.entidades.Rol;
import org.ugc.cnel.manabi.entidades.RolUsuario;
import org.ugc.cnel.manabi.jpa.RolJpaController;
import org.ugc.cnel.manabi.jpa.exceptions.IllegalOrphanException;
import org.ugc.cnel.manabi.jpa.exceptions.NonexistentEntityException;

/**
 *
 * @author Admin
 */
public class rolBakenBean {

    private eventosBakenBean ventana;
    private navegacionBakenBean nav;
    private Rol rolseleccionado;
    private final RolJpaController roljpa;
    private List<Rol> lista;
    private boolean btn_save_disable;
    private boolean disabled = true;
    //Campos del formulario
    private String descripcion;
    private String detalle;
    private boolean estado;
    private boolean required = false;
    private String nivel;
    private Integer id;
    private final SesionBean sessionbean;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public boolean isRequired() {
        return required;
    }

    public void setRequired(boolean requiered) {
        this.required = requiered;
    }

    public boolean isEstado() {
        return estado;
    }

    public void setEstado(boolean estado) {
        this.estado = estado;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getDetalle() {
        return detalle;
    }

    public void setDetalle(String detalle) {
        this.detalle = detalle;
    }

    public String getNivel() {
        return nivel;
    }

    public void setNivel(String nivel) {
        this.nivel = nivel;
    }

    /** Creates a new instance of usuarioBakenBean */
    public rolBakenBean() {
        this.disabled = true;
        FacesContext facesContext = FacesContext.getCurrentInstance();
        roljpa = (RolJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "RolJPA");
        sessionbean = (SesionBean) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "SesionBean");
    }

    public void nuevo(ActionEvent evt) {
        this.id = 0;
        this.descripcion = "";
        this.detalle = "";
        this.nivel = "1";
        this.estado = false;

        this.required = true;
        if (this.disabled) {
            this.disabled = false;
        }
        JavascriptContext.applicationFocus(FacesContext.getCurrentInstance(), "form_sistema:txt_descripcion");
    }

    public void guardar(ActionEvent evt) {

        //edita
        if (this.rolseleccionado != null) {

            Rol rol = new Rol(this.getId());
            rol.setDescripcion(descripcion);
            rol.setDetalle(detalle);
            rol.setNivel(Integer.valueOf(nivel));
            rol.setEstado(this.estado);
            rol.setRolUsuarioCollection(this.rolseleccionado.getRolUsuarioCollection());
            try {
                roljpa.edit(rol);
                getVentana().setPopup_header("Informacion");
                getVentana().setPopup_conten("Rol Se ha moficado correctamente");
            } catch (IllegalOrphanException ex) {
                getVentana().setPopup_header("Error");
                getVentana().setPopup_conten(ex.getMessage());
                Logger.getLogger(rolBakenBean.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NonexistentEntityException ex) {
                getVentana().setPopup_header("Error");
                getVentana().setPopup_conten(ex.getMessage());
            } catch (Exception ex) {
                getVentana().setPopup_header("Error");
                getVentana().setPopup_conten(ex.getMessage());
            }
            getVentana().setPopup_visible(true);
            return;
        }
        //Crea
        Rol rol = new Rol(this.getId(), descripcion, estado, Integer.valueOf(nivel));
        rol.setDetalle(detalle);
        rol.setRolUsuarioCollection(new ArrayList<RolUsuario>());
        try {
            roljpa.create(rol);
            getVentana().setPopup_header("Informacion");
            getVentana().setPopup_conten("Se ha Guardado correctamente");
        } catch (IllegalOrphanException ex) {
            getVentana().setPopup_header("Error");
            getVentana().setPopup_conten(ex.getMessage());
            Logger.getLogger(rolBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            getVentana().setPopup_header("Error");
            getVentana().setPopup_conten(ex.getMessage());
        } catch (Exception ex) {
            getVentana().setPopup_header("Error");
            getVentana().setPopup_conten(ex.getMessage());
        }
        getVentana().setPopup_visible(true);
        //Limpiar
        cancel(null);
    }

    public void cancel(ActionEvent evt) {
        this.rolseleccionado = null;
        this.id = 0;

        this.estado = false;
        this.descripcion = "";
        this.detalle = "";
        this.nivel = "1";
        this.required = false;
        if (this.disabled == false) {
            this.disabled = true;
        }
    }

    public void editar(ActionEvent evt) {

        rolseleccionado = (Rol) evt.getComponent().getAttributes().get("idfila");
        if (rolseleccionado != null) {
            this.id = rolseleccionado.getId();
            this.descripcion = rolseleccionado.getDescripcion();
            this.detalle = rolseleccionado.getDetalle();
            this.nivel = String.valueOf(rolseleccionado.getNivel());
            this.estado = rolseleccionado.getEstado();
            this.required = true;
            if (this.disabled == true) {
                this.disabled = false;
            }
        }
        JavascriptContext.focus(FacesContext.getCurrentInstance(), "form_sistema:txt_descripcion");
    }

    public void borrar(ActionEvent evt) {
        rolseleccionado = (Rol) evt.getComponent().getAttributes().get("idfila");
        if (rolseleccionado != null) {
            getVentana().setPopup_header("Advertencia");
            getVentana().setPopup_conten("¿Desea Eliminar el Registro?");
            getVentana().setTipo_ventana(eventosBakenBean.ACEPTAR_CANCELAR);
            getVentana().setPopup_visible(true);
            // Agregar el ActionListener en caso que el boton aceptar sea presionado no se si esta bien pero creo que funciona
            getVentana().limpiar_listener();
            getVentana().getBtn_1().addActionListener(new ActionListener() {

                public void processAction(ActionEvent evt) {
                    try {
                        roljpa.destroy(rolseleccionado.getId());
                        getLista();
                        cancel(evt);
                    } catch (NonexistentEntityException ex) {
                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar no existe Entidad");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(agenciaBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (Exception ex) {
                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar General");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(agenciaBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
        }
    }

    public void cancelar(ActionEvent evt) {
        this.rolseleccionado = null;
        this.disabled = true;
        getNav().setPagina_contenido("indicadores/indicadores.jspx");
    }

    public navegacionBakenBean getNav() {
        return nav;
    }

    public void setNav(navegacionBakenBean nav) {
        this.nav = nav;
    }

    public Rol getRolseleccionado() {
        return rolseleccionado;
    }

    public void setRolseleccionado(Rol rolseleccionado) {
        this.rolseleccionado = rolseleccionado;
    }

    public eventosBakenBean getVentana() {
        return ventana;
    }

    public void setVentana(eventosBakenBean ventana) {
        this.ventana = ventana;
    }

    public List<Rol> getLista() {
        //return lista;
        return roljpa.findRolEntities();
    }

    public void setLista(List<Rol> lista) {
        this.lista = lista;
    }

    public boolean isBtn_save_disable() {
        return btn_save_disable;
    }

    public void setBtn_save_disable(boolean btn_save_disable) {
        this.btn_save_disable = btn_save_disable;
    }

    public boolean isDisabled() {
        return disabled;
    }

    public void setDisabled(boolean disabled) {
        this.disabled = disabled;
    }
}
